package com.glacier.common.core.mapper;

import com.glacier.common.core.domain.TreeEntity;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * date 2022-12-30 10:47
 * mybatis 树形mapper 基类接口
 *
 * @author glacier
 * @version 1.0
 */
public interface TreeMapper<T extends TreeEntity<T>> extends BaseMapper<T> {

    /**
     * 根据id集合查询所有所有实体
     *
     * @param ids  id集合
     * @param <ID> id类型
     * @return 实体集合
     */
    <ID extends Serializable> List<T> findListByIds(@Param("ids") Collection<ID> ids);

    /**
     * 根据id 查询所有子节点id(包含孙子节点和自身节点)
     *
     * @param ids  id集合
     * @param <ID> id类型
     * @return 子节点id集合(包含孙子节点和自身节点)
     */
    <ID extends Serializable> List<ID> findAllChildrenIds(@Param("ids") Collection<ID> ids);
}
